在这里插入图片描述

Cying, What's Mean JDBC


JDBC - (Java Database Connectivity),是用于将 MySQL 连接到 Java 工程的开源 API

JDBC 主要结构

  • DriveManager - 作为链接到数据库的驱动存在 [好比移动/联通/电信]
  • Connection - 是 JavaMySQL 的会话连接 [好比一次拨号成功]
  • PrepareStatement - 是 JavaMySQL 发出的请求 [Java 告诉 MySQL 要干嘛]
  • ResultSet - MySQLJava 返回的结果

1.配置好驱动 DriverManager

  • 点击下载 JDBC 驱动器
  • 解压后,在 Java 项目中引入 mysql-connector-java-版本号.jar

    在这里插入图片描述

2.封装一个 DriveManager

因为每次注册驱动的方法都是一样的,无非就是用户 MySQL 的用户名、密码、要连接的数据库名,其中只有一个 要连接的数据库名 会不一样,所以我们一般把注册驱动封装成一个独立的 X.Java 文件

如下所示,在 X.Java (名字随意,我这里是ConnectToMySQL.java) 中有一个 getConnection 的方法,返回的类型为 Connection

  • 返回的是 DriverManager.getConnection(); ,其中有三个参数,一个分别是 URLUserNamePassWord
  • UserNamePassWord 记得改成自己的数据库账号、密码
  • URL 是数据库的连接地址,格式是固定的,只有中间的数据库名有变动,所以 URL 采用的字符串拼接方式,在拼接的时候就把传过来的数据库名加进去。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class ConnectToMySQL {

private static String username = "****";
private static String password = "****";

public static Connection getConnection(String dataBaseName) throws SQLException {

String url = "jdbc:mysql://localhost:3306/" + dataBaseName + "?useSSL=false&serverTimezone=UTC&charset=utf8";
return DriverManager.getConnection(url,username,password);

}

}

3.测试连接

  • 声明 Connection
  • 声明 PreparedStatement
  • 根据封装的 ConnectToMySQL 获取会话连接 connection
  • 对会话传输指令 preparedStatement
  • 执行 preparedStatement 的指令
  • 关闭 ConnectionPreparedStatement,先打开的后关闭,后打开的先关闭
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class T_JDBC {

static Connection connection = null;
static PreparedStatement pStatement = null;

public static void main(String[] args) throws SQLException {

connection = ConnectToMySQL.getConnection("T_JDBC"); // 连接数据库 T_JDBC

// 下面两句是查询部分,具体查询代码在 doQuery 方法中
System.out.printf("第一次查询:");
doQuery("SELECT * FROM USER");
/*
跳转至 doQuery(),并把 "SELECT * FROM USER" 传过去
User 是我在数据库 T_JDBC 中新建的表,有
NAME VARCHAR(20)
ID VARCHAR(20)
*/

// 下面四句是向数据库中写入数据
pStatement = connection.prepareStatement("INSERT INTO USER VALUES (?,?)");
/*
向 USER 表中添加数据,数据暂时用 ? 代替,避免出现 bug
这里有几个 ? 是根据要修改的额表的字段具体情况来定
*/
pStatement.setString(1, "Kevin"); // 设置第一个 ? 的值
pStatement.setString(2, "2019****"); // 设置第二个 ? 的值
pStatement.executeUpdate(); // 执行更新

// 下面两句是查询部分,具体查询代码在 doQuery 方法中
System.out.printf("第二次查询:");
doQuery("SELECT * FROM USER");

pStatement.close();
connection.close();
// 关闭 - 关闭顺序为从最后打开的,关到最开始打开的

}

public static void doQuery(String query) throws SQLException {

pStatement = connection.prepareStatement(query); // 告诉会话 connection 要准备执行 query,其中 query 中存放的是传递过来的指令
ResultSet rSet = pStatement.executeQuery(); // pStatement.executeQuery()是执行查询,这样就能的到查询的结果了,然后把结果放到 rSet 中

while(rSet.next()){ // 遍历 rSet ,每个 rSet.next() 跳一行,而且第一次取值之前必须执行一次 rSet,next(),否则报错
String records = rSet.getString(1) + " \t" + rSet.getString(2); // rSet.getString 中放表的某个字段的序号
System.out.println(records);
}
}
}

运行结果如下所示

在这里插入图片描述


数据库情况如下所示

在这里插入图片描述


Finish